package com.ruoyi.training.mapper;

import java.util.List;
import com.ruoyi.training.domain.PracticeClassStudent;
import com.ruoyi.training.dto.PracticeClassStudentDTO;
import com.ruoyi.training.dto.StudentAppointmentDTO;
import com.ruoyi.training.vo.PracticeClassStudentVo;
import org.apache.ibatis.annotations.Param;

/**
 * 实践预约班级学生中间Mapper接口
 * 
 * @author WorrilessGo
 * @date 2025-10-14
 */
public interface PracticeClassStudentMapper 
{
    /**
     * 查询实践预约班级学生中间
     * 
     * @param practiceClassStudentId 实践预约班级学生中间主键
     * @return 实践预约班级学生中间
     */
    public PracticeClassStudent selectPracticeClassStudentByPracticeClassStudentId(String practiceClassStudentId);

    /**
     * 查询实践预约班级学生中间列表
     * 
     * @param practiceClassStudent 实践预约班级学生中间
     * @return 实践预约班级学生中间集合
     */
    public List<PracticeClassStudent> selectPracticeClassStudentList(PracticeClassStudent practiceClassStudent);

    /**
     * 根据VO条件查询中间表数据
     * @param practiceClassStudentVo 查询条件
     * @return 中间表数据列表
     */
    List<PracticeClassStudent> selectByVo(PracticeClassStudentVo practiceClassStudentVo);


    /**
     * 新增实践预约班级学生中间
     * 
     * @param practiceClassStudent 实践预约班级学生中间
     * @return 结果
     */
    public int insertPracticeClassStudent(PracticeClassStudent practiceClassStudent);

    /**
     * 修改实践预约班级学生中间
     * 
     * @param practiceClassStudent 实践预约班级学生中间
     * @return 结果
     */
    public int updatePracticeClassStudent(PracticeClassStudent practiceClassStudent);

    /**
     * 删除实践预约班级学生中间
     * 
     * @param practiceClassStudentId 实践预约班级学生中间主键
     * @return 结果
     */
    public int deletePracticeClassStudentByPracticeClassStudentId(String practiceClassStudentId);

    /**
     * 批量删除实践预约班级学生中间
     * 
     * @param practiceClassStudentIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deletePracticeClassStudentByPracticeClassStudentIds(String[] practiceClassStudentIds);

    /**
     * 新增接口：查询当前班级实践预约学员情况
     * lqx
     */
    List<StudentAppointmentDTO> queryValidStudentAppointments(@Param("query") PracticeClassStudentDTO practiceClassStudentDTO);


    //查询学员对该实践的预约状态（班级-实践-学员关联关系）
    public PracticeClassStudent selectByClassPracticeStudent(@Param("classId") String classId,
                                                             @Param("practiceId") String practiceId,
                                                             @Param("studentId") String studentId,
                                                             @Param("projectId") String projectId);
}
